import pygame  # 导入pygame库，用于游戏开发。
import random  # 导入random库，用于生成随机数。

pygame.init()  # 初始化所有导入的pygame模块。

green = (0, 255, 0)  # 定义绿色RGB值。
blue = (50, 150, 180)  # 定义蓝色RGB值。

# 设置显示窗口的宽度和高度。
dis_width = 1000
dis_height = 700

# 创建一个尺寸为dis_width x dis_height的游戏显示窗口。
screen = pygame.display.set_mode((dis_width, dis_height))

clock = pygame.time.Clock()  # 创建一个时钟对象，用于控制帧率。

snake_block = 10  # 设置蛇和食物块的大小（像素）。
snake_speed = 10  # 设置蛇移动的速度（像素/每帧）。


# 函数：绘制蛇的身体。
def our_snake(snake_block, snake_list):
    """
    使用pygame.draw.rect()函数在屏幕上绘制矩形来表示蛇的身体部分。
    """
    for i in snake_list:
        print(i)  # 打印每个身体部位的位置。
        pygame.draw.rect(screen, 'black', [i[0], i[1], snake_block, snake_block])  # 在指定位置绘制黑色矩形。


# 主函数：包含游戏的主要逻辑循环。
def game_loop():
    running = False  # 游戏主循环标志变量。

    length_of_snake = 5  # 蛇的初始长度。
    snake_list = []  # 存储蛇的所有方块位置。
    x1 = dis_width / 2  # 初始蛇头x坐标。
    y1 = dis_height / 2  # 初始蛇头y坐标。

    x1_change = 0  # 蛇头x方向的变化量。
    y1_change = 0  # 蛇头y方向的变化量。

    foodx = round(random.randrange(0, dis_width - snake_block) / 10) * 10  # 食物x坐标。
    foody = round(random.randrange(0, dis_height - snake_block) / 10) * 10  # 食物y坐标。

    direction = None  # 当前蛇的方向。

    while not running:  # 游戏主循环。
        for event in pygame.event.get():  # 监听事件。
            if event.type == pygame.QUIT:  # 如果用户关闭窗口，则退出游戏。
                running = True
            if event.type == pygame.KEYDOWN:  # 按键事件处理。
                if event.key == pygame.K_UP and direction != 'DOWN':  # 上箭头键，并且当前方向不是向下。
                    y1_change = -snake_speed
                    x1_change = 0
                    direction = 'UP'
                elif event.key == pygame.K_DOWN and direction != 'UP':  # 下箭头键，并且当前方向不是向上。
                    y1_change = snake_speed
                    x1_change = 0
                    direction = 'DOWN'
                elif event.key == pygame.K_LEFT and direction != 'RIGHT':  # 左箭头键，并且当前方向不是向右。
                    x1_change = -snake_speed
                    y1_change = 0
                    direction = 'LEFT'
                elif event.key == pygame.K_RIGHT and direction != 'LEFT':  # 右箭头键，并且当前方向不是向左。
                    x1_change = snake_speed
                    y1_change = 0
                    direction = 'RIGHT'

        screen.fill(blue)  # 用蓝色填充背景。

        # 绘制食物。
        pygame.draw.rect(screen, green, [foodx, foody, snake_block, snake_block])

        x1 += x1_change  # 更新蛇头的新位置。
        y1 += y1_change

        snake_head = []  # 创建新列表存储蛇头坐标。
        snake_head.append(x1)
        snake_head.append(y1)
        snake_list.append(snake_head)  # 将蛇头坐标添加到蛇身列表中。
        if len(snake_list) > length_of_snake:  # 如果蛇身列表长度超过蛇的长度，则删除最旧的元素。
            del snake_list[0]

        our_snake(snake_block, snake_list)  # 调用函数绘制蛇身。
        pygame.display.update()  # 更新屏幕上的显示内容。
        clock.tick(12)  # 控制游戏速度，这里设置为每秒12帧。


# 开始游戏。
game_loop()